package com.njdj.gps.kernel.service.impl;

import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.njdj.gps.common.page.PageList;
import com.njdj.gps.common.page.PageProperty;
import com.njdj.gps.common.util.PageUtil;
import com.njdj.gps.kernel.dao.BaseDao;
import com.njdj.gps.kernel.service.BaseService;


/**
 * @Description: 基础Service，包含常用数据库操作。所有Service必须继承的
 * @author luj
 * @version 1.0
 * @created Feb 11, 2009
 */
public class BaseServiceImpl<T, I extends BaseDao<T>> implements
		BaseService<T> {
	protected final Log log = LogFactory.getLog(this.getClass());

	private I baseDao;

	public I getBaseDao() {
		return baseDao;
	}

	public void setBaseDao(I _baseDao){
		baseDao=_baseDao;
	}
	
	/**
     * @Description:得到数据对象
     * @param param map参数
     * @return 实体对象
     */
	public T getModel(Map param) {
		return baseDao.getModel(param);
	}
	
	/**
     * @Description:创建数据对象
     * @param po 实体对象
     */
	public void insert(T model) {
		baseDao.insert(model);
	}

	/**
     * @Description:单条修改数据对象
     * @param po 实体对象
     * @return 所影响的行数
     */
	public int update(T model) {
		int result = baseDao.update(model);
		return result;
	}
	
	/**
     * @Description:批量修改数据对象
     * @param param map参数
     * @return 所影响的行数
     */
	public int updateList(Map param) {
		int result = baseDao.updateList(param);
		return result;
	}
	
	/**
     * @Description:删除数据对象
     * @param param map参数
     * @return 所影响的行数
     */
	public void delete(Map param) {
		int result = baseDao.delete(param);
	}

	/**
     * @Description:得到数据对象列表按分页条件 当pp.getNpageSize=0时返回所有
     * @param pp PageProperty对象
     * @return 实体列表
     */
	public PageList<T> getPageList(PageProperty pp) {
		int count = baseDao.findCount(pp);
		int start = PageUtil.getStart(pp.getNpage(), count, pp
				.getNpagesize());
		int end = PageUtil.getEnd(pp.getNpage(), count, pp.getNpagesize());
		pp.putParamMap("start", start);
		pp.putParamMap("end", end);
		PageList<T>	pageList = new PageList<T>(pp, count, baseDao.findPageList(pp));
		return pageList;
	}

	/**
     * @Description:得到数据对象列表
     * @param param map参数
     * @return 实体列表
     */
	public List<T> listModel(Map param) {
		List<T> list = baseDao.list(param);
		return list;
	}

	
}
